package com.seafood.service;

import com.seafood.dto.TraceabilityDTO;
import com.seafood.dto.TraceabilityQueryDTO;
import com.seafood.entity.Traceability;
import com.seafood.common.PageResult;

import java.util.List;

/**
 * 溯源服务接口
 */
public interface TraceabilityService {
    
    /**
     * 创建溯源信息
     */
    TraceabilityDTO createTraceability(TraceabilityDTO traceabilityDTO);
    
    /**
     * 更新溯源信息
     */
    TraceabilityDTO updateTraceability(Long id, TraceabilityDTO traceabilityDTO);
    
    /**
     * 删除溯源信息
     */
    void deleteTraceability(Long id);
    
    /**
     * 根据批次号查询溯源信息
     */
    TraceabilityDTO getTraceabilityByBatchNumber(String batchNumber);
    
    /**
     * 根据二维码查询溯源信息
     */
    TraceabilityDTO getTraceabilityByQrCode(String qrCode);
    
    /**
     * 根据产品ID查询所有溯源信息
     */
    List<TraceabilityDTO> getTraceabilityByProductId(Long productId);
    
    /**
     * 生成批次号
     */
    String generateBatchNumber(Long productId);
    
    /**
     * 生成二维码
     */
    byte[] generateQRCode(String batchNumber);
    
    /**
     * 获取二维码URL
     */
    String getQRCodeUrl(String batchNumber);
    
    /**
     * 检查批次号是否存在
     */
    boolean existsByBatchNumber(String batchNumber);
    
    /**
     * 分页查询溯源信息
     */
    PageResult<TraceabilityDTO> queryTraceability(TraceabilityQueryDTO queryDTO);
    
    /**
     * 转换实体为DTO
     */
    TraceabilityDTO convertToDTO(Traceability traceability);
    
    /**
     * 转换DTO为实体
     */
    Traceability convertToEntity(TraceabilityDTO traceabilityDTO);
}